package org.biubiu0002.baiblog.core.service;

import com.baomidou.mybatisplus.extension.service.IService;
import org.biubiu0002.baiblog.core.model.entity.ShareLikeCountEntity;

/**
 * @Author: biubiu0002
 * @Date: 2022-05-15 16:42
 **/
public interface ShareLikeCountService extends IService<ShareLikeCountEntity> {

    /**
     * 从数据库读分享点赞数
     * @param shareId shareId
     * @return  点赞数
     */
    int getShareLikeCountFromDB(String shareId);

    /**
     * 从缓存读分享点赞数
     * @param shareId shareId
     * @return  点赞数
     */
    Integer getShareLikeCount(String shareId);

    /**
     * 计数器+1 业务上保证了先从缓存中读取 可以保证在较长一段时间内缓存不会过期
     * 若在缓存失效后，被刷新前，调用这个方法，点赞数会由0->1,
     * 刷新后又恢复到db中的实际数据。
     *
     * @param shareId 分享id
     */
    void incrementShareLikeCount(String shareId);

    /**
     * 计数器-1 业务上保证了先从缓存中读取 可以保证在较长一段时间内缓存不会过期
     * 若在缓存失效后，被刷新前，调用这个方法，点赞数不会减少，
     * 在刷新后又恢复到db中的实际数据。
     * @param shareId 分享id
     */
    void decrementShareLikeCount(String shareId);

    /**
     * 从redis将分享点赞数同步到db
     *
     */
    void syncShareLikeCountFromRedis2DB();

    /**
     * 清空每周点赞排行榜
     */
    void deleteWeeklyLikeCountBoard();

    /**
     * 将指定shareId的点赞数写回数据库
     * @param shareId shareId
     */
    void saveShareLikeCountFromRedis2DB(String shareId);
}
